home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / magic / magic.m < prev    next >
Text File  |  1997-10-26  |  21KB  |  612 lines

  1. MODULE Magic;
  2.  
  3. IMPORT  SYSTEM, Storage;
  4. IMPORT  MagicSys, MagicAES, MagicStrings;
  5. IMPORT  mtAppl, mtRsc, mtDials, mtAlerts, mtHelp, mtUtils, mtPopups, mtText,
  6.         mtAESMenus, mtTerminal, mtMenus, mtWindows, mtFonts, mtFontselector;
  7.  
  8. IMPORT  RTD;
  9.  
  10. CONST   cRes1 =    '[3][Bitte benutzen Sie fr einen|korrekten Programmablauf|';
  11.         cRes2 =    'mindestens eine Aufl”sung|von 640 x 200 Punkten!][ [Ok ]';
  12.         cTitle =   '[0][%DMagicDemo||Das Demo zu den MagicTools...|(C)92 by Peter Hellinger||';
  13.         cTitle2 =  'Dieses Programm ist Freeware!|][ [Ok ]';
  14.         cAlert1 =  '[0][Es k”nnen bis zu 16 Zeilen und 4 Buttons in einem|';
  15.         cAlert2 =  'Alert dargestellt werden. Auch in der Gr”že des Icon-Images|';
  16.         cAlert3 =  'ist man nicht begrenzt. Jede Alert-Zeile darf bis zu 60|';
  17.         cAlert4 =  'Zeichen aufnehmen. Es k”nnen auch in gewissem Grenzen|';
  18.         cAlert5 =  'Effekte eingesetzt werden:||';
  19.         cAlert6 =  '%D Diese Zeile wird doppelt unterstrichen.||';
  20.         cAlert7 =  '%U Diese Zeile wird einfach unterstrichen.||';
  21.         cAlert8 =  '%F Und diese wird Fett geschrieben][[Toll|[Prima|[Klasse|[Ok]';
  22.         
  23. CONST   Mover    =   1;  (* Formular/Dialog *)
  24.         Moverok  =  14;
  25.  
  26. CONST   String   =   3;  (* Formular/Dialog *)
  27.         Stringok =   9;
  28.  
  29. CONST   Buttons1 =   2;  (* Formular/Dialog *)
  30.         Butt1ok =   27;
  31.         Buttons2 =   7;
  32.         Butt2ok =    3;
  33.  
  34. CONST   Frame    =   4;  (* Formular/Dialog *)
  35.         Frameok  =  12;
  36.  
  37. CONST   Edit     =   6;  (* Formular/Dialog *)
  38.         Ed2      =   6;
  39.         Ed3      =   7;
  40.         Ed4      =   8;
  41.         Editable =  12;
  42.         Editok   =  13;
  43.         Ed1      =  14;
  44.  
  45. CONST   Menuline =   9;  (* Menuebaum *)
  46.  
  47. CONST   Mainmenu =  10;  (* Menuebaum *)
  48.         Magicdem =   3;
  49.         Datei    =   4;
  50.         Dialog   =   5;
  51.         Menus    =   6;
  52.         Sonstige =   7;
  53.         Info     =  10;
  54.         Quit     =  19;
  55.         Moveobjc =  21;
  56.         Stringob =  22;
  57.         Buttonob =  23;
  58.         Frameobj =  24;
  59.         Circleob =  25;
  60.         Editobjc =  26;
  61.         Winmenu  =  28;
  62.         Popupmen =  29;
  63.         Popups   =  30;
  64.         Alertbox =  32;
  65.         Fontsel  =  33;
  66.         Windial  =  34;
  67.  
  68. CONST   MaxLines = 400;
  69.  
  70. TYPE    InfoAction = (open, close, redraw, lineup, linedown, pageup, pagedown);
  71.  
  72. VAR     Rsc:            mtRsc.RESOURCE;
  73.         dial:           SYSTEM.ADDRESS;
  74.         string:         ARRAY [0..512] OF CHAR;
  75.         b, WinOpen:     BOOLEAN;
  76.         Win2Open:       BOOLEAN;
  77.         i, win, win2, win3: INTEGER;
  78.         old, term, term2, term3: mtTerminal.TERMINAL;
  79.         scr, small, rect, bar: mtUtils.tRect;
  80.         Menubar:        mtMenus.MENUBAR;
  81.         Text:           mtText.TEXT;
  82.         pos, zeilen:    INTEGER;
  83.  
  84.  
  85. PROCEDURE ShowInfo (action: InfoAction);
  86. VAR i: INTEGER;
  87.     r: mtUtils.tRect;
  88.     l: mtText.LINE;
  89.     z: mtText.PtrString;
  90.  
  91.  PROCEDURE WriteScreen;
  92.  VAR i: INTEGER;
  93.  BEGIN
  94.   mtTerminal.ClearScreen;
  95.   l:= mtText.FindNumber (Text, LONG (pos));
  96.   FOR i:= 0 TO mtTerminal.Lines - 1 DO
  97.    IF l # mtText.NilLine() THEN
  98.     z:= mtText.GetLinePtr (l);
  99.     mtTerminal.GotoXY (0, i);  mtTerminal.WriteLine (z^);
  100.     l:= mtText.NextLine (l);
  101.    END;
  102.   END;
  103.   pos:= pos + mtTerminal.Lines;
  104.  END WriteScreen;
  105.  
  106.  PROCEDURE LineUp;
  107.  BEGIN
  108.   IF pos > mtTerminal.Lines THEN
  109.    DEC (pos);
  110.    mtTerminal.GotoXY (0, 0);
  111.    mtTerminal.InsertLine;
  112.    l:= mtText.FindNumber (Text, LONG (pos - mtTerminal.Lines));
  113.    IF l # mtText.NilLine() THEN
  114.     z:= mtText.GetLinePtr (l);  mtTerminal.WriteLine (z^);
  115.    END;
  116.    mtAppl.MouseOn;
  117.   END;
  118.  END LineUp;
  119.  
  120.  PROCEDURE LineDown;
  121.  BEGIN
  122.   IF pos < zeilen THEN 
  123.    mtTerminal.GotoXY (0, 0);
  124.    mtTerminal.DeleteLine; 
  125.    mtTerminal.GotoXY (0, mtTerminal.Lines);
  126.    INC (pos);
  127.    l:= mtText.FindNumber (Text, LONG (pos));
  128.    IF l # mtText.NilLine() THEN
  129.    z:= mtText.GetLinePtr (l);  mtTerminal.WriteLine (z^);
  130.    END;
  131.    mtAppl.MouseOn;
  132.   END;
  133.  END LineDown;
  134.  
  135.  PROCEDURE PageUp;
  136.  BEGIN
  137.   DEC (pos, mtTerminal.Lines * 2);
  138.   IF pos < mtTerminal.Lines THEN  pos:= 0;  END;
  139.   WriteScreen;
  140.   mtAppl.MouseOn;
  141.  END PageUp;
  142.  
  143.  PROCEDURE PageDown;
  144.  BEGIN
  145.   INC (pos, mtTerminal.Lines);
  146.   IF pos >= zeilen THEN pos:= zeilen - mtTerminal.Lines;  END;
  147.   WriteScreen;
  148.   mtAppl.MouseOn;
  149.  END PageDown;    
  150.  
  151. BEGIN
  152.  CASE action OF
  153.   open:     b:= mtWindows.NewWindow ({MagicAES.NAME, MagicAES.CLOSER,
  154.                  MagicAES.MOVE, MagicAES.VSLIDE, MagicAES.UPARROW,
  155.                  MagicAES.DNARROW, MagicAES.Size, MagicAES.FULL}, 
  156.                  ' Info ber Magic ', '  ', win2);
  157.             mtWindows.MaxWorkarea (win2, r);
  158.             INC (r.x, 10);  INC (r.y, 10);  DEC (r.w, 20);  DEC (r.h, 20);
  159.             mtWindows.OpenWindow (win2, r);
  160.             term2:= mtTerminal.OpenTerminal (r);
  161.             old:= mtTerminal.ChangeTerminal (term2);
  162.             mtWindows.ConnectTerminal (win2, term2);
  163.             mtTerminal.ClearScreen;
  164.             pos:= 0;  Win2Open:= TRUE;
  165.             |
  166.   close:    mtTerminal.CloseTerminal (term2);
  167.             mtWindows.DeleteWindow (win2);
  168.             Win2Open:= FALSE;  win2:= -1;
  169.             RETURN;
  170.             |
  171.   redraw:   WriteScreen;
  172.             |
  173.   lineup:   LineUp;
  174.             |
  175.   linedown: LineDown;
  176.             |
  177.   pageup:   PageUp;
  178.             |
  179.   pagedown: PageDown;
  180.             |
  181.   ELSE ;
  182.  END;
  183.  mtWindows.WindowSlider (win2, 0, zeilen, mtTerminal.Lines, pos - mtTerminal.Lines);
  184. END ShowInfo;
  185.  
  186. PROCEDURE ShowDialog (tree, exit, edit: INTEGER);
  187. BEGIN
  188.  dial:= mtRsc.GaddrRsc (Rsc, MagicAES.RTREE, tree);
  189.  b:= mtDials.NewDial (dial);
  190.  mtDials.DialCenter (dial, mtDials.CSCREEN, 0, 0, rect);
  191.  mtDials.DialForm (dial, mtDials.DSTART, small, rect);
  192.  mtDials.DialForm (dial, mtDials.DGROW, small, rect);
  193.  mtDials.DialDraw (dial, 0, 8, scr, FALSE);
  194.  LOOP
  195.   i:= mtDials.DialDo (dial, edit);  b:= mtUtils.DoubleClick (i);
  196.   IF i = exit THEN
  197.    mtUtils.ExclState (dial, exit, MagicAES.SELECTED);
  198.    EXIT;
  199.   END;
  200.  END;
  201.  mtDials.DialForm (dial, mtDials.DSHRINK, small, rect);
  202.  mtDials.DialForm (dial, mtDials.DFINISH, small, rect);
  203.  mtDials.DisposeDial (dial);
  204. END ShowDialog;
  205.  
  206. PROCEDURE ShowCircle;
  207. CONST   Circle   =   5;  (* Formular/Dialog *)
  208.         Circtext =   5;
  209.         Circbutt =   6;
  210.         Circcolr =   9;
  211.         Circok   =  13;
  212. CONST   Popup2   =   8;  (* Formular/Dialog *)
  213.         Weiss    =   1;  (* STRING in Baum POPUP2 *)
  214.         Schwarz  =   2;  (* STRING in Baum POPUP2 *)
  215.         Rot      =   3;  (* STRING in Baum POPUP2 *)
  216.         Gruen    =   4;  (* STRING in Baum POPUP2 *)
  217.         Blau     =   5;  (* STRING in Baum POPUP2 *)
  218.         Cyan     =   6;  (* STRING in Baum POPUP2 *)
  219.         Gelb     =   7;  (* STRING in Baum POPUP2 *)
  220.         Magenta  =   8;  (* STRING in Baum POPUP2 *)
  221.         Hellgrau =   9;  (* STRING in Baum POPUP2 *)
  222.         Dunkelgr =  10;  (* STRING in Baum POPUP2 *)
  223.         Hellrot  =  11;  (* STRING in Baum POPUP2 *)
  224.         Hellgrun =  12;  (* STRING in Baum POPUP2 *)
  225.         Hellblau =  13;  (* STRING in Baum POPUP2 *)
  226.         Hellcyan =  14;  (* STRING in Baum POPUP2 *)
  227.         Hellgelb =  15;  (* STRING in Baum POPUP2 *)
  228.         Hellmage =  16;  (* STRING in Baum POPUP2 *)
  229.  
  230. VAR     dial:   mtUtils.tObjcTree;
  231.         pop:    SYSTEM.ADDRESS;
  232.         str:    ARRAY [0..40] OF CHAR;
  233.         index, idx, i, x, y: INTEGER;
  234.  
  235.  PROCEDURE SetCircle (index: INTEGER);
  236.  VAR i: CARDINAL;
  237.      s: BITSET;
  238.  BEGIN
  239.   IF (index > 0) AND (index <= mtAppl.MaxColors) THEN
  240.    mtUtils.ObjcString (pop, index, str);
  241.    mtUtils.SetObjcString (dial, Circtext, str);
  242.    DEC (index);
  243.  
  244.    (* Farben setzen *)
  245.    s:= MagicSys.CastToBitset (index);
  246.    FOR i:= 0 TO 3 DO
  247.     IF i IN s THEN INCL (dial^[Circcolr].obSpec.Box.flags, i);
  248.               ELSE EXCL (dial^[Circcolr].obSpec.Box.flags, i);
  249.     END;
  250.    END;
  251.  
  252.    mtDials.DialDraw (dial, Circtext, 0, scr, FALSE);
  253.    mtDials.DialDraw (dial, Circcolr, 0, scr, FALSE);
  254.   END;
  255.  END SetCircle;
  256.  
  257. BEGIN
  258.  dial:= mtRsc.GaddrRsc (Rsc, MagicAES.RTREE, Circle);
  259.  pop:= mtRsc.GaddrRsc (Rsc, MagicAES.RTREE, Popup2);
  260.  b:= mtDials.NewDial (dial);  b:= mtDials.NewDial (pop);
  261.  mtDials.SetUserkey (dial, Circbutt, 102, {}, TRUE, TRUE);
  262.  mtDials.SetUserkey (dial, Circtext, 101, {}, TRUE, TRUE);
  263.  index:= Weiss;
  264.  
  265.  (* Etwas Kosmetik *)
  266.  mtUtils.ObjcString (pop, index, str);
  267.  mtUtils.SetObjcString (dial, Circtext, str);
  268.  
  269.  mtDials.DialCenter (dial, mtDials.CSCREEN, 0, 0, rect);
  270.  mtDials.DialForm (dial, mtDials.DSTART, small, rect);
  271.  mtDials.DialForm (dial, mtDials.DGROW, small, rect);
  272.  mtDials.DialDraw (dial, 0, 8, rect, FALSE);
  273.  SetCircle (1);
  274.  
  275.  (* Nichtvorhandene Farben disablen *) 
  276.  FOR i:= (mtAppl.MaxColors + 1) TO Hellmage DO
  277.   mtUtils.InclState (pop, i, MagicAES.DISABLED);
  278.  END;
  279.  
  280.  LOOP
  281.   i:= mtDials.DialDo (dial, -1);  b:= mtUtils.DoubleClick (i);
  282.   CASE i OF
  283.    Circbutt:    INC (index);  IF index > Hellmage THEN index:= Weiss; END;
  284.                 WHILE mtUtils.InState (pop, index, MagicAES.DISABLED) DO
  285.                  INC (index);  IF index > Hellmage THEN index:= Weiss; END;
  286.                 END;
  287.                 SetCircle (index);
  288.                 |
  289.    Circtext:    MagicAES.ObjcOffset (dial, Circtext, x, y);
  290.                 idx:= mtPopups.TreePopup (pop, x, y, index - 1);
  291.                 IF (index >= Weiss) AND (index <= Hellmage) THEN
  292.                  index:= idx;  SetCircle (index);
  293.                 END;
  294.                 |
  295.    Circok:      mtUtils.ExclState (dial, Circok, MagicAES.SELECTED);
  296.                 EXIT;
  297.                 | 
  298.    ELSE
  299.   END;
  300.  END;
  301.  mtDials.DialForm (dial, mtDials.DSHRINK, small, rect);
  302.  mtDials.DialForm (dial, mtDials.DFINISH, small, rect);
  303.  mtDials.DisposeDial (dial);
  304. END ShowCircle;
  305.  
  306. PROCEDURE ShowWinmenu;
  307. VAR str:        ARRAY [0..40] OF CHAR;
  308.     tree:       SYSTEM.ADDRESS;
  309. BEGIN
  310.  tree:= mtRsc.GaddrRsc (Rsc, MagicAES.RTREE, Menuline);
  311.  i:= mtAlerts.Alert (1, '[2][Bitte w„hlen Sie den|Modus der Menzeile:][[Click|[Drop|[Pull]');
  312.  CASE i OF
  313.   1: mtMenus.ConfigMenu (mtMenus.click);|
  314.   2: mtMenus.ConfigMenu (mtMenus.drop);|
  315.   3: mtMenus.ConfigMenu (mtMenus.pull);|
  316.  END;
  317.  IF WinOpen = FALSE THEN
  318.   IF NOT mtMenus.NewMenu (tree, Menubar) THEN
  319.    i:= mtAlerts.Alert (1, '[3][Menzeile konnte nicht eingerichtet werden.][[Schade]');
  320.    RETURN
  321.   END;
  322.   IF NOT mtWindows.NewWindow ({0..15}, ' MagicDemo ', ' ', win) THEN
  323.    i:= mtAlerts.Alert (1, '[3][Fenster konnte nicht ge”ffnet werden.][[Schade]');
  324.    RETURN
  325.   END;
  326.   mtWindows.MaxWorkarea (win, rect);
  327.   rect.x:= 100;  rect.y:= 100;
  328.   rect.w:= rect.w DIV 2;  rect.h:= rect.h DIV 2;
  329.   mtWindows.OpenWindow (win, rect);
  330.   term:= mtTerminal.OpenTerminal (rect);
  331.   old:= mtTerminal.ChangeTerminal (term);
  332.   mtWindows.ConnectTerminal (win, term);
  333.   mtMenus.DrawMenu (Menubar, win, bar);
  334.   WinOpen:= TRUE;
  335.  END;
  336. END ShowWinmenu;
  337.  
  338. PROCEDURE CloseWinmenu;
  339. BEGIN
  340.  IF WinOpen THEN
  341.   mtTerminal.CloseTerminal (term);
  342.   mtWindows.CloseWindow (win);
  343.   mtWindows.DeleteWindow (win);
  344.   mtMenus.FreeMenu (Menubar);
  345.   WinOpen:= FALSE;  win:= -1;
  346.  END;
  347. END CloseWinmenu;
  348.  
  349. PROCEDURE ShowPopupline;
  350. VAR menu: SYSTEM.ADDRESS;
  351. BEGIN
  352.  menu:= mtRsc.GaddrRsc (Rsc, MagicAES.RTREE, Menuline);
  353.  i:= mtPopups.PopupMenu (menu, ' PopupMenu ');
  354. END ShowPopupline;
  355.  
  356. PROCEDURE ShowPopups;
  357. CONST Popup2 = 8;  (* Formular/Dialog *)
  358. VAR pop: SYSTEM.ADDRESS;
  359. BEGIN
  360.  MagicStrings.Assign ('  Eintrag 1|  Eintrag 2|  Eintrag 3|  Eintrag 4|  Eintrag 5', string);
  361.  i:= mtPopups.StringPopup (string, ' StringPopup ');
  362.  pop:= mtRsc.GaddrRsc (Rsc, MagicAES.RTREE, Popup2);
  363.  i:= mtPopups.TreePopup (pop, mtAppl.MaxWidth DIV 4, 
  364.                            mtAppl.MaxHeight DIV 4, 1);
  365. END ShowPopups;
  366.  
  367. PROCEDURE ShowAlerts;
  368. VAR i, j: INTEGER;
  369. BEGIN
  370.  i:= mtAlerts.Alert (1, '[2][Art der Icons:][ [Atari-Like | [Mac-Like ]');
  371.  CASE i OF
  372.   1:   mtAlerts.ConfigAlert (mtAlerts.gemicon);|
  373.   ELSE mtAlerts.ConfigAlert (mtAlerts.alticon);
  374.  END;
  375.  i:= mtAlerts.Alert (2, '[2][Justierung der Buttonkn”pfe:][ [Links | [Mitte | [Rechts ]');
  376.  CASE i OF
  377.   1:   mtAlerts.ConfigAlert (mtAlerts.left);|
  378.   3:   mtAlerts.ConfigAlert (mtAlerts.right);|
  379.   ELSE mtAlerts.ConfigAlert (mtAlerts.center);
  380.  END;
  381.  MagicStrings.Assign (cAlert1, string);
  382.  MagicStrings.Append (cAlert2, string);
  383.  MagicStrings.Append (cAlert3, string);
  384.  MagicStrings.Append (cAlert4, string);
  385.  MagicStrings.Append (cAlert5, string);
  386.  MagicStrings.Append (cAlert6, string);
  387.  MagicStrings.Append (cAlert7, string);
  388.  MagicStrings.Append (cAlert8, string);
  389.  i:= mtAlerts.Alert (1, string);
  390. END ShowAlerts;
  391.  
  392. PROCEDURE ShowFontsel;
  393. VAR numfont, font, size, width, skew: INTEGER;
  394.     effekt: BITSET;
  395.     select: BOOLEAN;
  396. BEGIN
  397.  IF mtTerminal.TextHandle > 0 THEN
  398.   select:= mtFontselector.FontSelector (mtTerminal.TextHandle, 
  399.         'Fontauswahl (nur Monospaced)', 
  400.             TRUE, TRUE, font, size, width, skew, effekt);
  401.   IF WinOpen THEN
  402.    mtTerminal.UpdateTerminal;
  403.    mtTerminal.ClearScreen;
  404.   END;
  405.  END; (* IF mtTerminal.TextHandle *)
  406. END ShowFontsel;
  407.  
  408. PROCEDURE RedrawWin (window, x, y, w, h: INTEGER);
  409. VAR rm, rl: mtUtils.tRect;
  410.     c, d: CARDINAL;
  411.     f: INTEGER;
  412. BEGIN
  413.  mtUtils.VarsToRect (x, y, w, h, FALSE, rm);
  414.  f:= 0;
  415.  LOOP
  416.   IF NOT mtWindows.RectList (window, f, rl) THEN  EXIT;  END;  f:= 1;
  417.   IF mtWindows.RcIntersect (rm, rl) THEN
  418.    mtTerminal.ClipRect (TRUE, rl);
  419.    IF window = win THEN
  420.     old:= mtTerminal.ChangeTerminal (term);
  421.     mtTerminal.ClearScreen;
  422.    ELSIF window = win2 THEN
  423.     old:= mtTerminal.ChangeTerminal (term2);
  424.     mtTerminal.ClearScreen;
  425.     ShowInfo (redraw);
  426.    END;
  427.   END;
  428.  END;
  429.  mtTerminal.ClipRect (FALSE, rl);
  430. END RedrawWin;
  431.  
  432.  
  433. VAR     mesag:          ARRAY [0..7] OF INTEGER;
  434.         taste, scan, clicks, f, title, item, x, y: INTEGER;
  435.         event, button, kbshift, scraps: BITSET;
  436.         ascii:          CHAR;
  437.         xx, yy:         CARDINAL;
  438.         keybrd, ExitProgram: BOOLEAN;
  439.         menu:           SYSTEM.ADDRESS;
  440.  
  441. PROCEDURE DoMenu (title, item: INTEGER);
  442. BEGIN
  443.  ExitProgram:= FALSE;
  444.  CASE item OF
  445.   Info:     ShowInfo (open);|
  446.   Quit:     ExitProgram:= TRUE;|
  447.   Moveobjc: ShowDialog (Mover, Moverok, -1);|
  448.   Stringob: ShowDialog (String, Stringok,-1);|
  449.   Buttonob: ShowDialog (Buttons1, Butt1ok, -1);
  450.             ShowDialog (Buttons2, Butt2ok, -1);|
  451.   Frameobj: ShowDialog (Frame, Frameok, -1);|
  452.   Circleob: ShowCircle;|
  453.   Editobjc: ShowDialog (Edit, Editok, Editable);|
  454.   Winmenu : ShowWinmenu;|
  455.   Popupmen: ShowPopupline;|
  456.   Popups  : ShowPopups;|
  457.   Alertbox: ShowAlerts;|
  458.   Fontsel : ShowFontsel;|
  459.   ELSE ;
  460.  END;
  461.  MagicAES.MenuTnormal (menu, title, 1);
  462. END DoMenu;
  463.  
  464. PROCEDURE DoKeyboard (scan: INTEGER; kbshift: BITSET);
  465. VAR title, item, mess: INTEGER;
  466. BEGIN
  467.  IF mtUtils.ScanMenu (menu, scan, kbshift, title, item) THEN
  468.   mesag[0]:= MagicAES.MNSELECTED;
  469.   mesag[1]:= mtAppl.ApplIdent;
  470.   mesag[2]:= 0;
  471.   mesag[3]:= title;
  472.   mesag[4]:= item;
  473.   INCL (event, MagicAES.MUMESAG);  
  474.  ELSIF scan = 98 THEN
  475.   ShowInfo (open);
  476.  END;
  477. END DoKeyboard;
  478.  
  479. BEGIN
  480.  mtAlerts.ConfigAlert (mtAlerts.right);
  481.  mtAlerts.ConfigAlert (mtAlerts.alticon);
  482.  
  483.  (* Bild zu klein? *)
  484.  IF mtAppl.MaxWidth < 639 THEN 
  485.   MagicStrings.Assign (cRes1, string);
  486.   MagicStrings.Append (cRes2, string);
  487.   i:= mtAlerts.Alert (1, string);
  488.  
  489.  ELSE (* Bild passt *)
  490.   scr.x:= 0;  scr.y:= 0; scr.w:= mtAppl.MaxWidth;  scr.h:= mtAppl.MaxHeight;
  491.   small.x:= mtAppl.MaxWidth DIV 2;  small.y:= mtAppl.MaxHeight DIV 2;
  492.   small.w:= 2;  small.h:= 2;  WinOpen:= FALSE;
  493.   IF mtRsc.LoadRsc ('MAGIC.RSC', Rsc) THEN
  494.    i:= mtFonts.LoadFonts (mtTerminal.TextHandle);
  495.    MagicStrings.Assign ('MAGIC.INF', string);
  496.    MagicAES.ShelFind (string);
  497.    b:= mtText.NewTEXT (Text);
  498.    i:= mtText.ReadText (Text, string);
  499.    zeilen:= SHORT (mtText.GetNumber (Text));
  500.    IF i = 0 THEN
  501.  
  502.     menu:= mtRsc.GaddrRsc (Rsc, MagicAES.RTREE, Mainmenu);
  503.     b:= mtAESMenus.InitMenuline (menu);
  504.     mtAESMenus.DrawMenuline (menu);
  505.     MagicStrings.Assign (cTitle, string);
  506.     MagicStrings.Append (cTitle2, string);
  507.     i:= mtAlerts.Alert (1, string);
  508.  
  509.     LOOP (* Mal sehen was so passiert *)
  510.      mtAppl.MouseArrow;
  511.  
  512.      event:= MagicAES.EvntMulti 
  513.          ({MagicAES.MUMESAG, MagicAES.MUKEYBD, MagicAES.MUM1},
  514.           0, {}, {}, 0, bar, 0, rect, mesag, 0, 0, x, y,
  515.           button, taste, kbshift, scan, ascii, clicks);
  516.  
  517.      IF MagicAES.MUKEYBD IN event THEN  DoKeyboard (scan, kbshift);  END;
  518.  
  519.      IF MagicAES.MUMESAG IN event THEN
  520.       CASE mesag[0] OF
  521.        MagicAES.MNSELECTED: DoMenu (mesag[3], mesag[4]);
  522.                             |
  523.        MagicAES.WMREDRAW:   RedrawWin (mesag[3], mesag[4], mesag[5], 
  524.                                        mesag[6], mesag[7]);
  525.                             mtAppl.MouseOn;
  526.                             |
  527.        MagicAES.WMTOPPED:   mtWindows.WindowTop (mesag[3]);
  528.                             IF mesag[3] = win THEN
  529.                              mtMenus.DrawMenu (Menubar, win, bar);
  530.                              old:= mtTerminal.ChangeTerminal (term);
  531.                              mtAppl.MouseOn;
  532.                             ELSIF mesag[3] = win2 THEN
  533.                              old:= mtTerminal.ChangeTerminal (term2);
  534.                              ShowInfo (redraw);
  535.                             END;
  536.                             |
  537.        MagicAES.WMCLOSED:   IF mesag[3] = win THEN
  538.                              CloseWinmenu;
  539.                             ELSIF mesag[3] = win2 THEN
  540.                              ShowInfo (close);
  541.                             ELSE
  542.                              mtWindows.CloseWindow (mesag[3]);
  543.                             END;
  544.                             |
  545.        MagicAES.WMFULLED:   mtWindows.WindowFulled (mesag[3]);
  546.                             IF mesag[3] = win THEN
  547.                              mtMenus.DrawMenu (Menubar, win, bar);
  548.                              mtTerminal.ClearScreen; 
  549.                              mtAppl.MouseOn;
  550.                             END;
  551.                             |
  552.        MagicAES.WMSIZED:    mtWindows.WindowSize (mesag[3], mesag[6], mesag[7]);
  553.                             IF mesag[3] = win THEN
  554.                              mtMenus.DrawMenu (Menubar, win, bar);
  555.                              mtTerminal.ClearScreen; 
  556.                              mtAppl.MouseOn;
  557.                             END;
  558.                             |
  559.        MagicAES.WMMOVED:    mtWindows.WindowPos (mesag[3], mesag[4], mesag[5]);
  560.                             IF mesag[3] = win THEN
  561.                              mtMenus.DrawMenu (Menubar, win, bar);
  562.                              mtAppl.MouseOn;
  563.                             END;
  564.                             |
  565.        MagicAES.WMARROWED:  IF win2 = mesag[3] THEN
  566.                              CASE mesag[4] OF
  567.                               MagicAES.WAUPPAGE: ShowInfo (pageup);|
  568.                               MagicAES.WADNPAGE: ShowInfo (pagedown);|
  569.                               MagicAES.WAUPLINE: ShowInfo (lineup);|
  570.                               MagicAES.WADNLINE: ShowInfo (linedown);|
  571.                               ELSE ;
  572.                              END;
  573.                             END;
  574.                             |
  575.         ELSE ;
  576.       END; (* CASE *)
  577.      END; (* IF MagicAES.MUMESAG *)
  578.       
  579.      IF MagicAES.MUM1 IN event THEN
  580.       IF win = mtWindows.TopWindow() THEN
  581.        mtMenus.HandleMenu (title, item);
  582.        IF title > 0 THEN
  583.         mtTerminal.WriteConst ('Objektnummer Men:    ');
  584.         mtTerminal.WriteInt (title, 0);  mtTerminal.WriteLn;
  585.         mtTerminal.WriteConst ('Objektnummer Eintrag: ');
  586.         mtTerminal.WriteInt (item, 0);
  587.         (* mtTerminal.WriteConst (' -> ');
  588.         mtTerminal.WriteLine (tree^[entry].obSpec.StringPtr^); *)
  589.         mtTerminal.WriteLn;
  590.         mtAppl.MouseOn;
  591.        END;
  592.       END;
  593.      END;
  594.  
  595.      IF ExitProgram THEN
  596.       i:= mtAlerts.Alert (1, '[2][|%FWirklich beenden?][[Ja|[Nein]');
  597.       IF i = 1 THEN  EXIT;  END;
  598.      END;
  599.  
  600.     END; (* LOOP *)
  601.  
  602.    ELSE
  603.     i:= mtAlerts.Alert (1, '[3][|%FInfo-Text konnte nicht gelesen werden!][ [Hoppla! ]');
  604.    END; (* IF i > 0 THEN *)
  605.   ELSE (* Resource nicht gefunden *)
  606.    i:= mtAlerts.Alert (1, '[3][|%FResource nicht gefunden!][ [Hoppla! ]');
  607.   END;
  608.  END;
  609.  mtFonts.UnloadFonts (mtTerminal.TextHandle);
  610.  mtAppl.ApplTerm (0);
  611. END Magic.
  612.